1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import static com.google.common.base.Preconditions.checkNotNull;
20
21 import com.google.common.annotations.GwtCompatible;
22 import com.google.common.base.Function;
23 import com.google.common.base.Objects;
24
25 import java.io.Serializable;
26
27 import javax.annotation.Nullable;
28
29
30
31
32
33 @GwtCompatible(serializable = true)
34 final class ByFunctionOrdering<F, T>
35 extends Ordering<F> implements Serializable {
36 final Function<F, ? extends T> function;
37 final Ordering<T> ordering;
38
39 ByFunctionOrdering(
40 Function<F, ? extends T> function, Ordering<T> ordering) {
41 this.function = checkNotNull(function);
42 this.ordering = checkNotNull(ordering);
43 }
44
45 @Override public int compare(F left, F right) {
46 return ordering.compare(function.apply(left), function.apply(right));
47 }
48
49 @Override public boolean equals(@Nullable Object object) {
50 if (object == this) {
51 return true;
52 }
53 if (object instanceof ByFunctionOrdering) {
54 ByFunctionOrdering<?, ?> that = (ByFunctionOrdering<?, ?>) object;
55 return this.function.equals(that.function)
56 && this.ordering.equals(that.ordering);
57 }
58 return false;
59 }
60
61 @Override public int hashCode() {
62 return Objects.hashCode(function, ordering);
63 }
64
65 @Override public String toString() {
66 return ordering + ".onResultOf(" + function + ")";
67 }
68
69 private static final long serialVersionUID = 0;
70 }